using Microsoft.VisualBasic;
using System;
using System.Collections;
using System.Collections.Generic;
using System.Data;
using System.Diagnostics;
using System.Linq;
using System.Xml.Linq;
using Connection;
using LUM;
namespace Entidades
{
    public abstract class DALPostulacion
    {
        private const string __ErrorAlta = "No se pudo dar el alta (Postulacion), ";
        private const string __ErrorBaja = "No se pudo dar la baja (Postulacion), ";
        private const string __ErrorModificacion = "No se pudo hacer la modificacion (Postulacion), ";
        private const string __ErrorTraerUno = "No se pudo Traer Uno (Postulacion), ";
        private const string __ErrorTraerTodos = "No se pudo Traer Todos (Postulacion), ";
        public static void Alta(Postulacion Postulacion)
        {
            try
            {
                parametrosArray pa = new parametrosArray();
                pa.add("IdUsuario", Postulacion.IdUsuario);
                pa.add("IdCategoria", Postulacion.IdCategoria);
                pa.add("Descripcion", Postulacion.Descripcion);
                pa.add("Titulo", Postulacion.Titulo);
                pa.add("IdLocalidad", Postulacion.IdLocalidad);
                using (DataSet ds = Connection.Connection.Traer("p_Postulacion_Alta", pa))
                {
                    if (ds.Tables.Count > 0)
                    {
                        Postulacion.Id = int.Parse(ds.Tables[0].Rows[0][0].ToString());
                    }
                    else
                    {
                        throw new Exception(__ErrorAlta);
                    }
                }
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorAlta + ex.Message);
            }
        }
        public static void Baja(int Id)
        {
            try
            {
                parametrosArray pa = new parametrosArray();
                pa.add("Id", Id);
                Connection.Connection.Ejecutar("p_Postulacion_Baja", pa);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorBaja + ex.Message);
            }
        }
        public static void Modificar(Postulacion Postulacion)
        {
            try
            {
                parametrosArray pa = new parametrosArray();
                pa.add("Id", Postulacion.Id);
                pa.add("IdUsuario", Postulacion.IdUsuario);
                pa.add("IdCategoria", Postulacion.IdCategoria);
                pa.add("Descripcion", Postulacion.Descripcion);
                pa.add("Titulo", Postulacion.Titulo);
                pa.add("IdLocalidad", Postulacion.IdLocalidad);
                Connection.Connection.Ejecutar("p_Postulacion_Modificacion", pa);
            }
            catch (Exception ex)
            {
                throw new Exception(__ErrorModificacion + ex.Message);
            }
        }
        public static Postulacion traerUno(int Id)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("Id", Id);
            using (DataSet ds = Connection.Connection.Traer("p_Postulacion_TraerUno", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        return llenarEntidad(ds.Tables[0].Rows[0]);
                    }
                }
            }
            throw new Exception(__ErrorTraerUno);
        }
        public static List<Postulacion> TraerTodos()
        {
            using (DataSet ds = Connection.Connection.Traer("p_Postulacion_TraerTodos"))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Postulacion> li = new List<Postulacion>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            throw new Exception(__ErrorTraerTodos);
        }
        public static void getAllByIdCategoria(ref List<Postulacion> lista, int IdCategoria, int pagina, int cantxPagina, ref int Paginas)
        {
            Paginas = 0;
            lista = new List<Postulacion>();
            parametrosArray pa = new parametrosArray();
            pa.add("IdCategoria", IdCategoria);
            pa.add("pagina", pagina);
            pa.add("cantPagina", cantxPagina);
            using (DataSet ds = Connection.Connection.Traer("p_Postulacion_getAllByIdCategoria", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        Paginas = int.Parse(LUM.lum.RoundUp(double.Parse(ds.Tables[0].Rows[0]["CantTotal"].ToString()) / cantxPagina, 0).ToString());
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            lista.Add(llenarEntidad(dr));
                        }
                    }
                }
            }
        }
        public static List<Postulacion> getAllByIdUsuario(int IdUsuario)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("IdUsuario", IdUsuario);
            using (DataSet ds = Connection.Connection.Traer("p_Postulacion_getAllByIdUsuario", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Postulacion> li = new List<Postulacion>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            throw new Exception("ErrorgetAllByIdUsuario");
        }

        internal static List<Postulacion> WSgetallByName(string descripcion)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("descripcion", descripcion);
            using (DataSet ds = Connection.Connection.Traer("p_Postulacion_WSgetallByName", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Postulacion> li = new List<Postulacion>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            return null;
        }

        internal static List<Postulacion> getAllByTitulo(string titulo)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("titulo", titulo);
            using (DataSet ds = Connection.Connection.Traer("p_Postulacion_getAllByTitulo", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Postulacion> li = new List<Postulacion>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            return null;
        }

        internal static int getCantidadPorCategoria(int idCategoria)
        {
            parametrosArray pa = new parametrosArray();
            pa.add("idCategoria", idCategoria);
            using (DataSet ds = Connection.Connection.Traer("p_Postulacion_getCantidadPorCategoria", pa))
            {
                if (ds.Tables.Count > 0)
                {
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        return int.Parse(ds.Tables[0].Rows[0][0].ToString());
                    }
                    return 0;
                }
            }
            throw new Exception("Error al traer la cantidad.");

        }


        internal static List<Postulacion> traerUltimas()
        {
            using (DataSet ds = Connection.Connection.Traer("p_Postulacion_traerUltimas"))
            {
                if (ds.Tables.Count > 0)
                {
                    List<Postulacion> li = new List<Postulacion>();
                    if (ds.Tables[0].Rows.Count > 0)
                    {
                        foreach (DataRow dr in ds.Tables[0].Rows)
                        {
                            li.Add(llenarEntidad(dr));
                        }
                    }
                    return li;
                }
            }
            return null;
        }

        private static Postulacion llenarEntidad(DataRow dr)
        {
            Postulacion Postulacion = new Postulacion();
            if (dr.Table.Columns.Contains("Id"))
            {
                if (!object.ReferenceEquals(dr["Id"], DBNull.Value))
                {
                    Postulacion.Id = int.Parse(dr["Id"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("IdUsuario"))
            {
                if (!object.ReferenceEquals(dr["IdUsuario"], DBNull.Value))
                {
                    Postulacion.IdUsuario = int.Parse(dr["IdUsuario"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("IdCategoria"))
            {
                if (!object.ReferenceEquals(dr["IdCategoria"], DBNull.Value))
                {
                    Postulacion.IdCategoria = int.Parse(dr["IdCategoria"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("Descripcion"))
            {
                if (!object.ReferenceEquals(dr["Descripcion"], DBNull.Value))
                {
                    Postulacion.Descripcion = dr["Descripcion"].ToString();
                }
            }
            if (dr.Table.Columns.Contains("FechaAlta"))
            {
                if (!object.ReferenceEquals(dr["FechaAlta"], DBNull.Value))
                {
                    Postulacion.FechaAlta = DateTime.Parse(dr["FechaAlta"].ToString());
                }
            }
            if (dr.Table.Columns.Contains("Titulo"))
            {
                if (!object.ReferenceEquals(dr["Titulo"], DBNull.Value))
                {
                    Postulacion.Titulo = dr["Titulo"].ToString();
                }
            }

            if (dr.Table.Columns.Contains("IdLocalidad"))
            {
                if (!object.ReferenceEquals(dr["IdLocalidad"], DBNull.Value))
                {
                    Postulacion.IdLocalidad =int.Parse(dr["IdLocalidad"].ToString());
                }
            }
            return Postulacion;
        }







    }
}
